home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BMUG Revelations
/
BMUG Revelations.toast
/
Utilities
/
Random
/
Commodore 64c
/
SOURCE
/
68K.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-03-12
|
2KB
|
104 lines
#include <asm.h>
#include "ProcessorTypes.h"
#include "Registers.h"
#include "Modes.h"
#include "Memory.h"
#define EA d0
#define PC d1
#define X d2
#define Y d3
#define A d4
#define FL d5
#define TD1 d6
#define TD2 d7
#define MEM a0
#define TA1 a1
#define TA2 a2
#define EAA a3
#define BYTEAT(addr, store) \
moveq #0, EA \
move.w addr, EA \
lsl.l #2, EA \
move.l (MEM, EA.l), EAA \
move.b (EAA), store \
#define WORDAT(addr, store) \
moveq #0, EA \
move.w addr, EA \
lsl.l #2, EA \
movea.l (MEM, EA.l), EAA \
move.b (EAA)+, store \
lsl.w #8, store \
or.b (EAA), store
#define ZERO \
moveq #0, TD1 \
BYTEAT(PC, TD1)
#define ZEROX \
moveq #0, TD1 \
BYTEAT(PC, TD1) \
add.b X, TD1
#define ZEROY \
moveq #0, TD1 \
BYTEAT(PC, TD1) \
add.b Y, TD1
#define INDX \
moveq #0, TD2 \
BYTEAT(PC, TD2) \
add.b X, TD2 \
moveq #0, TD1 \
WORDAT(TD2, TD1)
#define INDY \
moveq #0, TD2 \
BYTEAT(PC, TD2) \
moveq #0, TD1 \
WORDAT(TD2, TD1) \
add.w Y, TD1
#define ABS \
moveq #0, TD1 \
WORDAT(PC, TD1)
#define ABSX \
moveq #0, TD1 \
WORDAT(PC, TD1) \
add.w X, TD1
#define ABSY \
moveq #0, TD1 \
WORDAT(PC, TD1) \
add.w Y, TD1
Test68k()
{
unsigned long store68A[5], store68D[8];
word addrOld, addrNew;
Str255 str;
asm {
movem.l a0-a4, store68A
movem.l d0-d7, store68D
move.l memory, a1
move.l #0x0001, PC
BYTEAT(PC, TD1)
move.w TD1, addrNew
movem.l store68D, d0-d7
movem.l store68A, a0-a4
}
NumToString(addrNew, str);
DebugStr(str);
pc=0x0123;
addrOld=ByteAt(0x0001);
NumToString(addrOld, str);
DebugStr(str);
if (addrOld!=addrNew) DebugStr("\pBOOM");
}